package java8.timeutil;

import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.Calendar;
import java.util.Date;

/**
 * @author Cheng Jun
 * Description: jdk1.8 之前的Date 是用于表示一个日期和时间的API。
 * 为什么会有新旧两套API呢？因为历史遗留原因，旧的API存在很多问题，所以引入了新的API。
 * 那么我们能不能跳过旧的API直接用新的API呢？如果涉及到遗留代码就不行，因为很多遗留代码仍然使用旧的API，
 * 所以目前仍然需要对旧的API有一定了解，很多时候还需要在新旧两种对象之间进行转换。
 * @version 1.0
 * @date 2020/6/17 10:59
 * @link https://www.liaoxuefeng.com/wiki/1252599548343744/1303791989162017
 * @see java.util.Date
 */
public class DateStudy {

    public static void main(String[] args) {

        // 获取当前时间:
        Date date = new Date();
        // 必须加上1900
        System.out.println(date.getYear() + 1900);
        // 0~11，必须加上1
        System.out.println(date.getMonth() + 1);
        // 1~31，不能加1
        System.out.println(date.getDate());

        // 转换为String:
        System.out.println(date.toString());
        // 转换为GMT时区:
        System.out.println(date.toGMTString());
        // 转换为本地时区:
        System.out.println(date.toLocaleString());

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));

        // Date实例对象转换成 Instant实例对象，本质是根据毫秒数转换的
        Instant instant = date.toInstant();
        System.out.println(instant);
        Date from = Date.from(instant);
        System.out.println(from);

        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.toString());
        calendar.set(Calendar.YEAR, 2012);
        System.out.println(calendar);

        Instant.ofEpochSecond(1592443800);
    }
}
